/**********************************************************************************
 *
 *	文件名称：ShowImg.c
 * 	文件作用：调用各个查看不同类型的函数实现相片缩略图模式或者大图模式
 * 	文件作者：WSY
 * 	修改日期：2023.12.25
 *  	注意事项：
 *
 *	版权声明：CopyRight (c)  @cecelmx.126.com  All Right Reserved
 * ********************************************************************************/

#include "showImg.h"
#include "node.h"
#include "head.h"
#include <unistd.h>

/// @brief 给定一个图片信息链表头，选择模式后在LCD屏上显示
/// @param head 要打开的文件链表头
/// @param mode 要打开的模式，0为缩略图，1为大图查看
/// @param lcd_mmap 要显示的设备显存地址
/// @return 返回1为无错误，-1是错误
int showImg(P_Node head, int *lcd_mmap, int mode, char *desName, char desType)
{
    /*定义起始x和y的值，循环累加*/
    /*起始x坐标为-200，也就是贴着左屏幕，y为80，也就是上方留出一部分空间装按钮*/
    int start_x = -200;
    int start_y = 80;
    /*建立变量来消灭bug*/
    /*不知道为什么第一张图片老是从200,80的位置开始显示，所以要设置为200,80*/
  

    /*调用清屏算法，将开发板背景清空或者另设背景*/
    /*打开图库先打开背景图片*/
    if (showImgJpg("/workdir/prodemo/data/systemImg/libBak.jpg", lcd_mmap, 0, 0, 1) <= 0)
    {
        printf("打开功能图片失败！\n");
        return -1;
    }
      /*通过mode的值来判断是何模式，如果是SHOW_MODE_TL则用缩略图方式来显示*/
    if (SHOW_MODE_TL == mode)
    {
        /*打开图库先将图库的返回按键和个人信息按钮*/
        if (showImgJpg("/workdir/prodemo/data/systemImg/imgTop.jpg", lcd_mmap, 0, 0, 1) <= 0)
        {
            printf("打开功能图片失败！\n");
            return -1;
        }
           

        /*先遍历链表head，读取每一个节点的图片类型*/
        /* 进行条件判断，如果是bmp类型，则用bmp解码方式来显示，否则使用jpg格式*/
        for (P_Node tmp = head; tmp->Next != head; tmp = tmp->Next)
        {
            /*设置图片缩略图位置*/
            if (start_x >= 800)
            {
                start_x = 0;
                start_y += 200;
            }
            /*如果这个界面放满8张图片了，则从头开始写，因为技术不够，无法换界面*/
            if (start_y >= 400)
            {
                start_x = 0;
                start_y = 80;
                sleep(2);
                printf("开始第二轮显示图片!\n");
            }

    
            if (tmp->Data.Type == 'b')
            {
        
                
                //printf("调用showImgBmp函数打开bmp图片，文件路径为：%s , 类型为： %c\n", tmp->Data.Name, tmp->Data.Type);
                
                
                /*调用函数showImgBmp()来将每一张图片按照格式显示*/
                int is_bmp = showImgBmp(tmp->Data.Name, lcd_mmap, start_x, start_y, mode);
                if (is_bmp == -1)
                {
                    perror("调用函数显示bmp图片错误!");
                    return -1;
                }
            }
            if (tmp->Data.Type == 'j')
            {
                
                //printf("调用showImgBmp函数打开jpg图片，文件路径为：%s , 类型为： %c\n", tmp->Data.Name, tmp->Data.Type);
              
                /*调用函数showImgTow()来将每一张图片按照格式显示*/
                int is_jpg = showImgJpg(tmp->Data.Name, lcd_mmap, start_x, start_y, mode);
                if (is_jpg == -1)
                {
                    perror("调用函数显示jpg图片错误!");
                    return -1;
                }
            }
            
            /*将每次显示完一张图片，将坐标偏移*/
            start_x += 200;
            /*延时出现*/
            usleep(1000*50);
            

        }
    }
    
    else
    {
        /*如果是大图模式，则打开第三个参数，也就是指定的图片名称来系显示到大屏上*/
        /*那么将原图大小显示到较为居中的位置即可*/
        if (desType == 'b')
        {
            printf("调用showImgBmp函数打开bmp图片，文件路径为：%s , 类型为： %c\n", desName, desType);
            /*调用函数showImgBmp()来将每一张图片按照格式显示*/
            int is_bmp = showImgBmp(desName, lcd_mmap, start_x, start_y, mode);
            if (is_bmp == -1)
            {
                perror("调用函数显示bmp图片错误!");
                return -1;
            }
        }
        else
        {
            printf("调用showImgBmp函数打开jpg图片，文件路径为：%s , 类型为： %c\n", desName, desType);
            /*调用函数showImgTow()来将每一张图片按照格式显示*/
            int is_jpg = showImgJpg(desName, lcd_mmap, 0, 0, mode);
            if (is_jpg == -1)
            {
                perror("调用函数显示jpg图片错误!");
                return -1;
            }
            sleep(1);
            /*延时1秒后，将返回按钮显示在上面*/
            if (showImgJpg("/workdir/prodemo/data/systemImg/imgTop.jpg", lcd_mmap, 0, 0, 1) <= 0)
            {
                printf("打开功能图片失败！\n");
                return -1;
            }
        }
    }

    /*滑屏算法在这里会比较好*/
    /*不管是什么模式，点击左上角的返回，或者点开右上角的个人信息*/
    /*调用获取坐标函数,获取触摸屏坐标*/
    struct absVa hh = {0};
    while (1)
    {
        /*点击左上角则返回选择界面*/
        hh = getAbsVa();
        printf("(%d,%d)\n", hh.va_x, hh.va_y);

        /*点击左上角则返回选择界面*/
        if (ifChiek(10,120,0,80,hh.va_x,hh.va_y))
        {
            mainGif();    /* 先打开主界面动画，再打开主界面 */
            ChoiceFun(head);  /* 打开选择界面 */
            return 1;
        }
        else if (ifChiek(650,800,0,80,hh.va_x,hh.va_y)) /*点击左上角则返回选择界面*/
        {
            printf("个人信息");
            return 1;
            break;
        }
        /*这里设置八张图片的位置，点击某位置，可以打开指定位置的缩略图，变为大图模式*/



        /*滑屏算法，如果向上滑或者向左滑，即可刷新前面八张图片*/


        /*滑屏算法，如果向下滑或者向右滑，即可刷新后面八张图片*/

        /*数据域要做多一点信息，要有该图片的位置和di几张图片的编号*/
  

    }
    

    return 1;
}
